package pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author 老安
 * @data 2022/7/26 19:51
 * 线程池
 * 线程池是线程的管理机制,它主要解决两个问题:
 * 1:控制线程数量
 * 2:复用线程
 * 线程池使用步骤:
 * 1:创建线程池对象
 * 2:添加线程
 * 3:关闭线程池(一般不使用)
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //1:创建线程池对象,固定大小的线程池,容量为2
        //new 创建 Fixed 固定 Thread 线程 Pool 池
        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        for (int i = 0; i < 5; i++) {
            Task task = new Task();
            //2:将任务交给线程池
            threadPool.execute(task);
            System.out.println("将一个任务交给了线程池");
        }
        //3:关闭线程池,如果此时线程还有任务没有执行完,会执行完任务再结束
        threadPool.shutdown();
        //立即关闭线程池,不论是否有任务
        //threadPool.shutdownNow();
        System.out.println("线程池结束了!");
    }
}
class Task implements Runnable{
    @Override
    public void run() {
        Thread t = Thread.currentThread();
        System.out.println(t.getName()+"正在执行任务...");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(t.getName()+"任务执行完毕...");
    }
}